﻿//1170. 比较字符串最小字母出现频次
//定义一个函数 f(s)，统计 s  中（按字典序比较）最小字母的出现频次 ，其中 s 是一个非空字符串。
//例如，若 s = "dcce"，那么 f(s) = 2，因为字典序最小字母是 "c"，它出现了 2 次。
//现在，给你两个字符串数组待查表 queries 和词汇表 words 。对于每次查询 queries[i] ，需统计 words 中满足 f(queries[i]) < f(W) 的 词的数目 ，W 表示词汇表 words 中的每个词。
//请你返回一个整数数组 answer 作为答案，其中每个 answer[i] 是第 i 次查询的结果。


class Solution {
public:
    int f(string s)
    {
        int cnt[26] = { 0 };
        for (auto& ch : s)
        {
            cnt[ch - 'a']++;
        }
        for (int i = 0; i < 26; i++)
        {
            if (cnt[i])  return cnt[i];
        }
        return 0;
    }

    vector<int> numSmallerByFrequency(vector<string>& queries, vector<string>& words)
    {
        vector<int>   ans;
        vector<int>   cnt;
        for (auto& s : words)
        {
            cnt.push_back(f(s));
        }
        sort(cnt.begin(), cnt.end());
        for (auto& s : queries)
        {
            int x = f(s);
            int i = cnt.end() - lower_bound(cnt.begin(), cnt.end(), x + 1);
            ans.push_back(i);
        }

        return ans;
    }
};